package com.game.common.eventsystem;

import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 事件分发管理器
 */
public class EventDispatchManager {
    // 缓存监听的事件与事件监听器的映射
    // 一个事件可以有多个监听器
    private Map<String, List<IGameEventListener>> eventListenerMap = new HashMap<>();

    /**
     * 注册事件监听器
     * @param eventClass
     * @param listener
     */
    public void registerEventListener(Class<? extends IGameEventMessage> eventClass, IGameEventListener listener) {
        String key = eventClass.getName();
        List<IGameEventListener> listeners = eventListenerMap.get(key);
        if (CollectionUtils.isEmpty(listeners)) {
            listeners = new ArrayList<>();
            this.eventListenerMap.put(key, listeners);
        }
        listeners.add(listener);
    }

    /**
     * 发送事件
     * @param origin
     * @param gameEventMessage
     */
    public void sendGameEvent(Object origin, IGameEventMessage gameEventMessage) {
        String key =  gameEventMessage.getClass().getName();
        List<IGameEventListener> listeners = this.eventListenerMap.get(key);
        if (!CollectionUtils.isEmpty(listeners)) {
            listeners.forEach(listener -> listener.update(origin, gameEventMessage));
        }
    }
}
